AWS CloudTrail で s3 ls コマンド(バケット指定あり)の api コール記録を確認する方法を教えてください。
困っていた内容
以下のコマンドを実行しましたが、AWS CloudTrail に ListBuckets として記録されていません。 AWS CloudTrail で対象の api コールを確認する方法を教えてください。
s3 ls s3://{バケット指定あり}
どう対応すればいいの?
AWS CloudTrail にて証跡のデータイベントのログ記録設定の有効化をしている前提で、 ListBuckets ではなく ListObjects を証跡ログで確認できます。
以下、詳細な説明を記載します。
詳細
ListBuckets はaws s3 ls {バケット指定なし}
の場合に記録されます。
ListObjects はaws s3 ls {バケット指定あり}
の場合に記録されます。
各コマンドの場合における AWS CloudTrail への記録先は以下の通りになります。
- ListBuckets として記録されるコマンドを実行した場合
- イベント履歴:表示される
- 証跡ログ:表示される
- ListObjects として記録されるコマンドを実行した場合
- イベント履歴:表示されない
- 証跡ログ:表示される(証跡のデータイベントのログ記録設定の有効化時)
ついては、対象の api コール(aws s3 ls {バケット指定あり}
)を確認するには、
事前に証跡のデータイベントのログ記録設定の有効化いただき、
証跡ログにて ListObjects をご確認ください。
以下のデータ型が記録されます。
・Amazon S3 オブジェクトレベルの API アクティビティ (例: GetObject、DeleteObject、PutObject API オペレーション)
・AWS Lambda 関数の実行アクティビティ (Invoke API)デフォルトでは、証跡の作成時にデータイベントは記録されません。CloudTrail データイベントを記録するには、証跡にアクティビティを収集する、サポート対象のリソースまたはリソースタイプを明示的に追加する必要があります。
CloudTrail のログ記録によって追跡される Amazon S3 オブジェクトレベルのアクション | AWS
これらのオペレーションに加えて、次のバケットレベルのオペレーションを使用して、特定の条件下で CloudTrail ログをオブジェクトレベルの Amazon S3 アクションとして取得できます。 GET Bucket (List Objects) Version 2 – 証跡に指定されたプレフィックスを選択します。
参考までに Amazon Athena における対象ログのクエリ例を記載します。
- ListObjectsでフィルタ
SELECT * FROM "{対象 Database}"."{対象 Table}" WHERE eventname LIKE 'ListObjects' AND eventtime > '2021-01-01T12:00:00Z' ORDER BY eventtime DESC;
- ユーザ名でフィルタ
SELECT * FROM "{対象 Database}"."{対象 Table}" WHERE WHERE useridentity.userName LIKE '{ユーザ名}' AND eventtime > '2021-01-01T12:00:00Z' ORDER BY eventtime DESC;